package br.unirio.octopus.dominio;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * Classe que representa a fase da disputa da Copa do Mundo
 * 
 * @author Carlos
 * 
 */
@Entity
@Table(name = "fase")
public class Fase implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 6178122269469861418L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id", unique = true, nullable = false)
	private int idDaFase;

	@Column(name = "nome", nullable = false)
	private String nome;

	@Column(name = "peso", nullable = false)
	private int peso;

	@Column(name = "aberto", nullable = false, columnDefinition = "INT DEFAULT 0")
	private int aberto;
	
	@OneToOne
	private Fase proxima;

	// Construtores

	public Fase() {
		super();
	}

	public Fase(String nome, int peso, int aberto) {
		super();
		this.nome = nome;
		this.peso = peso;
		this.aberto = aberto;
	}

	/* **********************************
	 * Gets/Sets
	 * 
	 * **********************************
	 */

	public int getIdDaFase() {
		return idDaFase;
	}

	public void setIdDaFase(int idDaFase) {
		this.idDaFase = idDaFase;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public int getPeso() {
		return peso;
	}

	public void setPeso(int peso) {
		this.peso = peso;
	}

	public int getAberto() {
		return aberto;
	}

	public void setAberto(int aberto) {
		this.aberto = aberto;
	}

	public Fase getProxima()
	{
		return proxima;
	}

	public void setProxima(Fase proxima)
	{
		this.proxima = proxima;
	}
	
	public enum Fases
	{
		GRUPOS("Grupos"), OITAVAS("Oitavas"), QUARTAS("Quartas"), SEMIFINAL("Semifinal"), TERCEIRO("Terceiro"), FINAL("Final");
		
		private String nome;

		private Fases(String nome)
		{
			this.nome = nome;
		}

		public String getNome()
		{
			return nome;
		}	
		
	}
	
	@Override
	public boolean equals(Object obj) {
		if(obj!=null){
			if(obj instanceof Fase){
				Fase fase = (Fase) obj;
				if(fase.getIdDaFase()==this.idDaFase){
					return true;
				}
			}			
		}
		return false;
	}
	
}
